package com.yqb.study.common.multidatasource;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

/**
 * Spring boot提供了AbstractRoutingDataSource根据用户定义的规则选择当前的数据库，这样我们可以在执行查询之前，设置当前使用数据源
 * 动态数据源
 */
public class DynamicDataSource extends AbstractRoutingDataSource {

	@Override
	protected Object determineCurrentLookupKey() {
		// 决定当前使用的哪个数据源
		return DataSourceContextHolder.getDataSourceType();
	}

}

// 如果是读写分离多数据源，可以在代码层面实现读的负载均衡
//public class MyAbstractRoutingDataSource extends AbstractRoutingDataSource {  
//    private final int dataSourceNumber;  
//    private AtomicInteger count = new AtomicInteger(0);  
//  
//    public MyAbstractRoutingDataSource(int dataSourceNumber) {  
//        this.dataSourceNumber = dataSourceNumber;  
//    }  
//  
//    @Override  
//    protected Object determineCurrentLookupKey() {  
//        String typeKey = DataSourceContextHolder.getJdbcType();  
//        if (typeKey.equals(DataSourceType.write.getType()))  
//            return DataSourceType.write.getType();  
//        // 读 简单负载均衡  
//        int number = count.getAndAdd(1);  
//        int lookupKey = number % dataSourceNumber;  
//        return new Integer(lookupKey);  
//    }  
//}  